package com.mini.grpc.common;

/**
 * StatusRuntimeException表示RPC调用过程中发生的运行时异常。
 * 
 * <p>它包含一个Status对象，用于表示异常的具体原因，以及可选的元数据。
 */
public class StatusRuntimeException extends RuntimeException {
    private static final long serialVersionUID = 1L;
    
    private final Status status;
    private final Metadata metadata;
    
    /**
     * 使用指定的状态创建一个异常
     *
     * @param status 异常状态
     */
    public StatusRuntimeException(Status status) {
        this(status, null);
    }
    
    /**
     * 使用指定的状态和元数据创建一个异常
     *
     * @param status 异常状态
     * @param metadata 元数据，可以为null
     */
    public StatusRuntimeException(Status status, Metadata metadata) {
        super(status.getDescription());
        this.status = status;
        this.metadata = metadata;
    }
    
    /**
     * 获取异常的状态
     *
     * @return 状态
     */
    public Status getStatus() {
        return status;
    }
    
    /**
     * 获取异常的元数据
     *
     * @return 元数据，可能为null
     */
    public Metadata getMetadata() {
        return metadata;
    }
    
    @Override
    public String getMessage() {
        if (status.getDescription() == null) {
            return status.getCode().toString();
        } else {
            return status.getCode() + ": " + status.getDescription();
        }
    }
} 